package ufc.rafaelcds.combudroid;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

import ufc.rafaelcds.combudroid.dao.AbastecimentoDAO;
import ufc.rafaelcds.combudroid.misc.CombuDroidException;
import ufc.rafaelcds.combudroid.misc.FacebookUtil;
import ufc.rafaelcds.combudroid.model.Abastecimento;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AbastecerActivity extends Activity {
	
	private Double qtdeLitrosUltimoAbastecimento;
	AbastecimentoDAO abastecimentoDAO = new AbastecimentoDAO(this);
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
        setContentView(R.layout.abastecer);
        
        Button btCadastrar = (Button) findViewById(R.id.abastecer_btCadastrar);
        btCadastrar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				abastecer();
			}
		});
        
        EditText editKmRodados = (EditText) findViewById(R.id.abastecer_editKmRodados);
        qtdeLitrosUltimoAbastecimento = abastecimentoDAO.getQtdeLitrosUltimoAbastecimento();
        if (qtdeLitrosUltimoAbastecimento == null) {
	        editKmRodados.setEnabled(false);
	        editKmRodados.setHint("Este é seu 1º abastecimento.");
        }
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	MenuItem botaoAbastecer = menu.add(0, 0, 0, "Voltar");
    	botaoAbastecer.setIcon(R.drawable.back);
    	
    	return super.onCreateOptionsMenu(menu);
    }

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		if (item.getItemId() == 0) {
			startActivity(new Intent(this, CombuDroidActivity.class));
		}
		return super.onOptionsItemSelected(item);
	}
	
	private void abastecer() {
		EditText editKmRodados = (EditText) findViewById(R.id.abastecer_editKmRodados);
		EditText editPrecoLitro = (EditText) findViewById(R.id.abastecer_editPrecoLitro);
		EditText editQtdeLitros = (EditText) findViewById(R.id.abastecer_editQtdeLitros);
		
		try {
			if (editQtdeLitros.getEditableText().length() == 0) {
				throw new CombuDroidException("Quantidade de litros é obrigatória.");
			}
			if (editPrecoLitro.getEditableText().length() == 0) {
				throw new CombuDroidException("Preço do litro é obrigatório.");
			}
			
			final Abastecimento abastecimento = new Abastecimento();
			abastecimento.primeiroAbastecimento = !editKmRodados.isEnabled();
			abastecimento.precoLitro = Double.parseDouble(editPrecoLitro.getEditableText().toString());
			abastecimento.qtdeLitros = Double.parseDouble(editQtdeLitros.getEditableText().toString());
			if (editKmRodados.getEditableText().length() > 0) {
				abastecimento.kmRodados = Integer.parseInt(editKmRodados.getEditableText().toString());
			}
			
			abastecimentoDAO.insert(abastecimento);
			
			Toast.makeText(this, "Abastecimento cadastrado!", Toast.LENGTH_SHORT).show();
			
			new AlertDialog.Builder(this)
				.setMessage("Publicar no Facebook?")
				.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						publicar(abastecimento);
					}
				})
				.setNegativeButton("Não", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						startActivity(new Intent(AbastecerActivity.this, CombuDroidActivity.class));
					}
				})
				.show();
		} catch (CombuDroidException e) {
			Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(this, R.string.erro_inesperado, Toast.LENGTH_LONG).show();
		}
	}
	
	private void publicar(final Abastecimento abastecimento) {
		DecimalFormat decimalFormat = new DecimalFormat("###,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR")));
		String mensagem = "";
		if (qtdeLitrosUltimoAbastecimento != null) {
			String strKmPorLitro = decimalFormat.format(abastecimento.kmRodados / qtdeLitrosUltimoAbastecimento).replace(",00", "");
			mensagem += String.format("Meu carro fez %s km/litro. ", strKmPorLitro);
		}
		String strQtdeLitros = decimalFormat.format(abastecimento.qtdeLitros).replace(",00", "");
		mensagem += String.format("Acabei de abastecer %s litros.", strQtdeLitros);
		Log.d(AbastecerActivity.class.getName(), mensagem);

		FacebookUtil.publicar(AbastecerActivity.this, mensagem, new Runnable() {
			@Override
			public void run() {
				startActivity(new Intent(AbastecerActivity.this, CombuDroidActivity.class));
			}
		});
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		FacebookUtil.FACEBOOK.authorizeCallback(requestCode, resultCode, data);
	}

}
